مشخصات پروژه
-
2051
-
0.0
-
16623
-
0
-
2
دسترسی به تصاویر از طریق Resource File
در برنامه ساده ای که پیاده سازی خواهیم کرد، تعدادی تصویر در فایل .resx قرا می دهیم و در فرم اصلی اقدام به واکشی تصویر مورد نظر می کنیم.
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.
سلام. با یکی دیگر از آموزش های C# در خدمت شما هستیم. در این مقاله قصد داریم کار کردن با فایل های منبع یا Resource Fileها را به شما آموزش دهیم.
معمولاً در فایل های منبع اطلاعاتی ذخیره می شود که مورد استفاده برنامه قرار می گیرند. در این فایل می توان تنظیمات برنامه، رشته ها، اشیاء یا فایل های باینری را ذخیره کرد. این اطلاعات بعداً به تگ های XML تبدیل می شوند. با استفاده از این فایل ها، می توانید متن یا گرافیک برنامه را بدون ویرایش کد، توسط خود برنامه، تغییر دهید. مثلاً در برنامه های چند زبانه، بدون نیاز به تغییر عبارت نمایش داده شده بر روی کنترل ها، می توان برای هر زبان یک فایل منبع ساخت و هنگام نمایش، با توجه به زبان محلی کاربر، عبارات مناسب را بر روی هر کنترل نشان داد.
در برنامه ساده ای که پیاده سازی خواهیم کرد، تعدادی تصویر در فایل .resx قرا می دهیم و در فرم اصلی اقدام به واکشی تصویر مورد نظر می کنیم.
نیازمندی ها
برای ساخت این پروژه کوچک، به نرم افزارهای زیر احتیاج خواهیم داشت:
· Visual Studio 2013
ساخت فرم اصلی
برای ساخت پروژه، Visual Studio را باز کنید و به مسیر زیر بروید:
در پنجره ای که باز می شود، مطمئن شوید از بین قالب های نصب شده، مطمئن شوید در مسیر زیر قرار دارید:
Template>Visual C#>Windows
سپس Windows Forms Application را انتخاب کرده و یک نام برای پروژه خود وارد کنید:
فایل ها و فرم های ایجاد شده به شکل زیر خواهند بود:
شروع به کار
می خواهیم تعدادی تصویر با اسامی مشخص، به عنوان فایل های منبع در پروژه ذخیره کنیم.
سپس به تعداد تصاویر دکمه بر روی فرم قرار می دهیم. قصد داریم با فشردن هر دکمه، تصویر مربوطه نمایش داده شود.
قبل از شروع، برای دسترسی به فایل های منبه باید فضای نام زیر را در فرم مورد نظر import کنیم:
using System.Resources;
به همین منظور هشت Button (به تعداد تصاویر) و یک PictureBox بر روی فرم قرار می دهیم. خاصیت Text هر Button را برابر با نام یکی از تصاویر قرار دهید.نام PictureBox را به picFromResource و خاصیت SizeMode آن را به StretchImage تغییر دهید:
برای ایجاد فایل منبع یا همان ResourceFile بر روی نام پروژه در Solution Explorer راست کلیک کرده و گزینه Add>New Item را انتخاب کنید:
سپس در نجره باز شده، گزینه Resources File را انتخاب کنید و نام ImageResource.resx را در فیلد ورود نام، وارد کنید:
به این ترتیب یک فایل با پسوند .resx به پروژه اضافه می شود:
در صورت باز نبودن، بر روی نام فایل (ImageResource.resx) دوبار کلیک کنید. در صفحه باز شده، از منوی سمت چپ در آن، گزینه Images را انتخاب کنید (یا به راحتی کلید میانبر Ctrl+2 را فشار دهید):
حالا باید تصاویر مورد نظر را داخل این پنجره بکشید. با این کار تصاویر در پوشه منبع کپی می شوند و از طریق فایل منبع به آن ها دسترسی خواهیم داشت.
همه چیز برای کد نویسی آماده شده است!!
فرم اصلی را باز کنید و با فشردن دکمه F7 وارد قسمت کد نویسی شوید. می خواهیم یک تابع بنویسیم که با رویداد کلیک هر دکمه فراخوانی و اجرا شود:
private void SelectItem(object sender, EventArgs e)
{
//Dastoorat
}
حالا بر روی Button اول کلیک کنید و در پنجره Properties، وارد قسمت رخدادهای کنترل مربوطه بشوید:
از بین رخدادهای نمایش داده شده، در رویداد Click، نام متدی که در ابلا تعریف کرده ایم را وارد می کنیم:
این کار را برای سایر دکمه ها تکرار می کنیم.
می خواهیم در این تابع، دکمه ای که باعث رخداد Click شده است در پارامتر sender قرار می گیرد و می توانیم با استفاده از آن به خواص دکمه مورد نظر دسترسی پیدا کنیم. سپس خاصیت Text آن را استخراج می کنیم و به عنوان ورودی تابع LoadItem ارسال می کنیم:
private void SelectItem(object sender, EventArgs e)
{
Button btnIndex = (Button)sender;
LoadItem(btnIndex.Text);
}
در تابع LoadItem متن روی دکمه به عنوان پارامتر ورودی دریافت می شود و سعی می کند با دسترسی به فایل منبع، تصویر مورد نظر را استخراج کند و در picFromResource نمایش دهد:
private void LoadItem(string resourceName)
{
try
{
ResourceManager rm = new ResourceManager(typeof(ImageResource));
Bitmap objImage = (Bitmap)rm.GetObject(resourceName);
if (objImage != null)
{
picFromResource.SizeMode = PictureBoxSizeMode.StretchImage;
picFromResource.Image = objImage;
}
else
{
picFromResource.SizeMode = PictureBoxSizeMode.Normal;
picFromResource.Image = picFromResource.ErrorImage;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
در متد فوق برای واکشی فایل های منبع از کلاس ResourceManager استفاده کرده ایم. در متد سازنده این کلاس، تابع typeof نام فایل .resx را به عنوان پارامتر ورودی دریافت می کند.با این کار یک نمونه از فایل منبع ایجاد کرده ایم.
ResourceManager rm = new ResourceManager(typeof(ImageResource));
سپس از طریق متد GetObject، که نام تصویر یا به عبارتی همان متن روی دکمه را به عنوان پارامتر ورودی دریافت می کند و شی مورد نظر را از بین فایل های موجود در منبع، استخراج می کند:
rm.GetObject(resourceName);
کافیست با استفاده از TypeCasting نوع شی دریافتی را به Bitmap تغییر دهیم و یک شی از روی آن بسازیم:
Bitmap objImage = (Bitmap)rm.GetObject(resourceName);
در مرحله بعد چک میکند که اگر تصویر در منبع پیدا شد (objImage != null)، آن را به خاصیت Image کنترل picFromResoure اختصاص می دهد. در غیر اینصورت به جای تصویر، یک ضربدر در کنترل مربوطه قرار می دهد:
if (objImage != null)
{
picFromResource.SizeMode = PictureBoxSizeMode.StretchImage;
picFromResource.Image = objImage;
}
else
{
picFromResource.SizeMode = PictureBoxSizeMode.Normal;
picFromResource.Image = picFromResource.ErrorImage;
}
با اجرای برنامه می بینید که با فشردن هر دکمه، تصویر تغییر می کند و تصویری نمایش داده می شود که که هم نام با متن نمایش داده شده بر روی دکمه فشرده شده باشد:
سخن آخر
امیدوار هستیم از این آموزش لذت برده باشید و بتوانید به راحتی از آن استفاده کنید. البته فایل پروژه نیز از سایت، قابل دانلود می باشد.
ممنون عالی بود خسته نباشید